package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

public interface OrderService extends IService<OrderInfo> {
    /**
     * 提交订单信息，并且保存到对应的订单明细表、订单表
     * @param orderInfo
     * @return
     */
    Long saveOrderInfo(OrderInfo orderInfo);

    /**
     * 生成流水号
     */
    String getTradeNo(String userId);

    /**
     * 对比流水号
     * @param tradeNo
     * @param userId
     * @return
     */
    Boolean checkTradeNo(String tradeNo,String userId);

    /**
     * 删除缓存流水号
     * @param userId
     */
    void delTradeNo(String userId);

    /**
     * 验证库存
     * @param skuId
     * @param skuNum
     * @return
     */
    Boolean checkStock(Long skuId, Integer skuNum);

    /**
     * 查询我得订单
     * @param pageParam
     * @param userId
     * @return
     */
    IPage<OrderInfo> getPage(Page<OrderInfo> pageParam, String userId);

    /**
     * 取消订单回滚状态
     * @param orderId
     */
    void execExpiredOrder(Long orderId);

    /**
     * 更新过期订单  flag 根据 1 2 判断支付
     * @param orderId
     * @param flag
     */
    void execExpiredOrder(Long orderId,String flag);


    /**
     * 订单id
     * @param orderId
     * @return
     */
    OrderInfo getOrderInfo(Long orderId);

    /**
     * 修改订单状态
     * @param orderId
     * @param processStatus
     */
    void updateOrderStatus(Long orderId, ProcessStatus processStatus);

    /**
     * 发送消息通知库存
     * @param orderId
     */
    void sendOrderStatus(Long orderId);

    /**
     * 将orderInfo中部分数据转换为Map
     * @param orderInfo
     * @return
     */
    Map initWareOrder(OrderInfo orderInfo);

    /**
     * 1.4.2  订单实现拆单接口
     */
    List<OrderInfo> orderSplit(Long orderId, String wareSkuMap);
}
